local addonName,ns = ...
local L = ns.L
local DB = ns.PlateColorDB
local SetLoaded--设置加载一次
ns.event("PLAYER_ENTERING_WORLD", function()
if SetLoaded then return end
SetLoaded = true
--分页5滚动内容不需要滚动框架就直接锚定在ns.tabframe5
local ConFrame5 = CreateFrame("Frame", "ConFrame5", ns.tabframe5)
ConFrame5:SetSize(670,480)
ConFrame5:SetAllPoints(ns.tabframe4)
ns.Y[5] = 0	--设置起始位置

local NPCltext = ns.AddSetTiText(ConFrame5,5,"")

local NPCDesc1 = ConFrame5:CreateFontString(nil, "ARTWORK", "GameFontNormalLarge")
NPCDesc1:SetPoint("TOPLEFT",ConFrame5,"TOPLEFT", 15, -45)
NPCDesc1:SetFont(ns.fonts, 15, "OUTLINE")
NPCDesc1:SetTextColor(1,1,1)
NPCDesc1:SetText(L["NPC说明一"])
local NPCDesc2 = ConFrame5:CreateFontString(nil, "ARTWORK", "GameFontNormalLarge")
NPCDesc2:SetPoint("TOPLEFT",NPCDesc1,"BOTTOMLEFT", 0, -10)
NPCDesc2:SetFont(ns.fonts, 15, "OUTLINE")
NPCDesc2:SetTextColor(1,1,1)
NPCDesc2:SetText(L["NPC说明二"])

--创建NPC表格背景
local NPCTableFrame = CreateFrame("Frame", "MyTableFrame", ConFrame5, "BackdropTemplate")
NPCTableFrame:SetSize(650, 400)
NPCTableFrame:SetPoint("TOPLEFT",15,-90)
NPCTableFrame:SetBackdrop({
    bgFile = "Interface\\DialogFrame\\UI-DialogBox-Background",
    edgeFile = "Interface\\DialogFrame\\UI-DialogBox-Border",
    edgeSize = 16,
    insets = { left = 4, right = 4, top = 4, bottom = 4 },
})
NPCTableFrame:SetBackdropColor(0, 0, 0, 0.5)
NPCTableFrame:SetBackdropBorderColor(0.7, 0.7, 0.7)
--表格列表分类按钮
--ns.AddClassB(NPCTableFrame,L["NPC列表分类按钮颜色"],53, 9,-2)
--ns.AddClassB(NPCTableFrame,L["NPC列表分类按钮ID"],72, 87,-2)


-- 创建NPC表格滚动框架
local NPCscrollFrame = CreateFrame("ScrollFrame", "MyScrollFrame", NPCTableFrame, "UIPanelScrollFrameTemplate")
NPCscrollFrame:SetPoint("TOPLEFT", NPCTableFrame, "TOPLEFT", 4, -5)
NPCscrollFrame:SetPoint("BOTTOMRIGHT", NPCTableFrame, "BOTTOMRIGHT", -30, 5)
-- 创建NPC内容框架
local NPCcontentFrame = CreateFrame("Frame", nil, NPCscrollFrame)
NPCcontentFrame:SetSize(620, 180)
NPCscrollFrame:SetScrollChild(NPCcontentFrame)	--设置滚动框内容为内容框架

--自动同步缺少的NPC
for id, autodatacon in pairs(DB["NPCs"]) do
	if not PlateColorDB["NPCs"][id] then
		PlateColorDB["NPCs"][id] = autodatacon
	end
end
--自动删除多余的NPC
for id, autodatacon in pairs(PlateColorDB["NPCs"]) do
	if type(PlateColorDB["NPCs"][id]) == "table" then
		if not DB["NPCs"][id] and not PlateColorDB["NPCs"][id]["set"] then
			PlateColorDB["NPCs"][id] = nil
		end
		if DB["NPCs"][id] and not PlateColorDB["NPCs"][id]["set"] then
			PlateColorDB["NPCs"][id] = DB["NPCs"][id]
		end
	end
end

--初始化NPC图表内容
for key, datacon in pairs(PlateColorDB["NPCs"]) do
	local idname = ns.GetNpcName(key) or L["初始化NPC名称错误"]
	C_Timer.After(1,function()
		if type(PlateColorDB["NPCs"][key]) == "table" then
			if not datacon.color then
				PlateColorDB["NPCs"][key]["color"] = {}
				PlateColorDB["NPCs"][key]["color"]["r"] = PlateColorDB["npccolor1"]["r"]
				PlateColorDB["NPCs"][key]["color"]["g"] = PlateColorDB["npccolor1"]["g"]
				PlateColorDB["NPCs"][key]["color"]["b"] = PlateColorDB["npccolor1"]["b"]
				PlateColorDB["NPCs"][key]["usename"] = true
			elseif datacon.color == 1 then
				PlateColorDB["NPCs"][key]["color"] = {}
				PlateColorDB["NPCs"][key]["color"]["r"] = PlateColorDB["npccolor1"]["r"]
				PlateColorDB["NPCs"][key]["color"]["g"] = PlateColorDB["npccolor1"]["g"]
				PlateColorDB["NPCs"][key]["color"]["b"] = PlateColorDB["npccolor1"]["b"]
				--应用到血条,并保存到数据库
				PlateColorDB["NPCs"][key]["usehp"] = true
				PlateColorDB["NPCs"][key]["set"] = true
			elseif datacon.color == 2 then
				PlateColorDB["NPCs"][key]["color"] = {}
				PlateColorDB["NPCs"][key]["color"]["r"] = PlateColorDB["npccolor2"]["r"]
				PlateColorDB["NPCs"][key]["color"]["g"] = PlateColorDB["npccolor2"]["g"]
				PlateColorDB["NPCs"][key]["color"]["b"] = PlateColorDB["npccolor2"]["b"]
				--应用到血条,并保存到数据库
				PlateColorDB["NPCs"][key]["usehp"] = true
				PlateColorDB["NPCs"][key]["set"] = true
			elseif datacon.color == 3 then
				PlateColorDB["NPCs"][key]["color"] = {r=1,g=1, b=0}
				PlateColorDB["NPCs"][key]["usehp"] = true
				PlateColorDB["NPCs"][key]["usename"] = true
			elseif datacon.color == 4 then
				PlateColorDB["NPCs"][key]["color"] = {r=1,g=0, b=1}
				PlateColorDB["NPCs"][key]["usehp"] = true
				PlateColorDB["NPCs"][key]["usename"] = true
				--PlateColorDB["NPCs"][key]["usename"] = true
			end
			
			ns.AddNPCTableButtons(NPCcontentFrame,key,ns.GetNpcName(key) or L["初始化NPC名称错误"])
		end
	end)
end


--是否过滤默认
local function NpsTableHide()
	ns.NPCyOffset = -5
	for key, row in pairs(ns.NPCrowFrames) do
		if DB["NPCs"][key] then
			if not PlateColorDB.npcShowDefault and not PlateColorDB["NPCs"][key]["set"] then
				ns.NPCrowFrames[key]:Hide()
			else
				ns.NPCrowFrames[key]:Show()
			end
		else
			ns.NPCrowFrames[key]:Show()
		end
		if ns.NPCrowFrames[key]:IsShown() then -- 只对显示的行重新定位
			ns.NPCrowFrames[key]:SetPoint("TOPLEFT", 5, ns.NPCyOffset)
			ns.NPCyOffset = ns.NPCyOffset - 28
		end
	end
end

--显示隐藏默认
local tableshown = CreateFrame("CheckButton", nil, ConFrame5, "InterfaceOptionsCheckButtonTemplate")
tableshown:SetPoint("TOPLEFT",ConFrame5,"TOPLEFT", 400,-10)
tableshown:SetChecked(PlateColorDB.npcShowDefault)
tableshown:SetScript("OnClick", function (self)
	PlateColorDB.npcShowDefault = self:GetChecked()
	NpsTableHide()
end)
local tableshownText = tableshown:CreateFontString(nil, "ARTWORK", "GameFontHighlight")
tableshownText:SetPoint("LEFT",tableshown,"RIGHT", 5, 1)
tableshownText:SetText(L["NPC显示默认列表"])

-- 创建NPC表格查询添加输入框
local NpcQueryBox = ns.AddEditBox(ConFrame5,25,-8,80,true)
NpcQueryBox:HookScript("OnEnterPressed", function(self)	--回车
	self:ClearFocus() -- 清除编辑框的焦点
    local id = self:GetText() -- 获取编辑框中的文本
	if not id or id == "" then return end
	local idname = ns.GetNpcName(id) or L["回车添加NPC名称错误"]
	C_Timer.After(0.2,function()
		local idname = ns.GetNpcName(id) or L["回车添加NPC名称错误"]
		--DB插入
		if type(PlateColorDB["NPCs"][id]) == "table" then
			print(id.."--"..idname.."--"..L["回车添加NPC存在"])
			return 
		end
		local addcolor = {}
		addcolor["r"] = PlateColorDB["npccolor1"]["r"]
		addcolor["g"] = PlateColorDB["npccolor1"]["g"]
		addcolor["b"] = PlateColorDB["npccolor1"]["b"]
		local newtable = {name=idname, note = "",set=true,color=addcolor}
		PlateColorDB["NPCs"][id] = newtable
		--表内插入
		ns.AddNPCTableButtons(NPCcontentFrame,id,idname)
		C_Timer.After(0.1,function()	--延迟设置滚动条到最底部,不延迟不会获取到最大值
			NPCscrollFrame:SetVerticalScroll(NPCscrollFrame:GetVerticalScrollRange())
		end)
	end)

end)
NpcQueryBox:HookScript("OnTextChanged", function(self, userInput)
    local text = self:GetText() -- 获取输入框中的文本
	ns.NPCyOffset = -5
	if text == "" or text == nil then
		NpsTableHide()
	else
		for key, row in pairs(ns.NPCrowFrames) do
			if string.find(key,text) then
				ns.NPCrowFrames[key]:Show()
			else
				ns.NPCrowFrames[key]:Hide()
			end
			
			if ns.NPCrowFrames[key]:IsShown() then -- 只对显示的行重新定位
				ns.NPCrowFrames[key]:SetPoint("TOPLEFT", 5, ns.NPCyOffset)
				ns.NPCyOffset = ns.NPCyOffset - 28
			end
			
		end
	end
end)


--NPC添加按钮
local NpcAddButton = ns.AddButtons(ConFrame5,L["NPC添加文字"],110,-11,60,23)
NpcAddButton:HookScript("OnClick", function(self, button, down)
    NpcQueryBox:ClearFocus() -- 清除编辑框的焦点
    local id = NpcQueryBox:GetText() -- 获取编辑框中的文本
	local idname = ns.GetNpcName(id) or L["点击添加NPC名称错误"]
	if not id or id == "" then return end
	C_Timer.After(0.2,function()
		local idname = ns.GetNpcName(id) or L["回车添加NPC名称错误"]
		--DB插入
		if type(PlateColorDB["NPCs"][id]) == "table" then
			print(id.."--"..idname.."--"..L["回车添加NPC存在"])
			return 
		end
		local addcolor = {}
		addcolor["r"] = PlateColorDB["npccolor1"]["r"]
		addcolor["g"] = PlateColorDB["npccolor1"]["g"]
		addcolor["b"] = PlateColorDB["npccolor1"]["b"]
		local newtable = {name=idname, note = "",set=true,color=addcolor}
		PlateColorDB["NPCs"][id] = newtable
		--表内插入
		ns.AddNPCTableButtons(NPCcontentFrame,id,idname)
		C_Timer.After(0.1,function()	--延迟设置滚动条到最底部,不延迟不会获取到最大值
			NPCscrollFrame:SetVerticalScroll(NPCscrollFrame:GetVerticalScrollRange())
		end)
	end)
end)

--恢复NPC默认
local NPCltextRe = ns.AddfuncButton(ConFrame5,NPCltext,L["恢复NPC列表"],508, 0, 125)
NPCltextRe:HookScript("OnClick", function()
	ns.NPCyOffset = -5
	for key, datacon in pairs(PlateColorDB["NPCs"]) do
		if key then
			if ns.NPCrowFrames[key] then
				ns.NPCrowFrames[key]:Hide()
			end
			ns.NPCrowFrames[key] = nil
		end
	end
	PlateColorDB["NPCs"] = DB["NPCs"]
	for key, datacon in pairs(DB["NPCs"]) do
		local idname = ns.GetNpcName(key) or L["初始化NPC名称错误"]
		if not datacon.color then
				PlateColorDB["NPCs"][key]["color"] = {}
				PlateColorDB["NPCs"][key]["color"]["r"] = PlateColorDB["npccolor1"]["r"]
				PlateColorDB["NPCs"][key]["color"]["g"] = PlateColorDB["npccolor1"]["g"]
				PlateColorDB["NPCs"][key]["color"]["b"] = PlateColorDB["npccolor1"]["b"]
			elseif datacon.color == 1 then
				PlateColorDB["NPCs"][key]["color"] = {}
				PlateColorDB["NPCs"][key]["color"]["r"] = PlateColorDB["npccolor1"]["r"]
				PlateColorDB["NPCs"][key]["color"]["g"] = PlateColorDB["npccolor1"]["g"]
				PlateColorDB["NPCs"][key]["color"]["b"] = PlateColorDB["npccolor1"]["b"]
				PlateColorDB["NPCs"][key]["usename"] = true
			elseif datacon.color == 2 then
				PlateColorDB["NPCs"][key]["color"] = {}
				PlateColorDB["NPCs"][key]["color"]["r"] = PlateColorDB["npccolor2"]["r"]
				PlateColorDB["NPCs"][key]["color"]["g"] = PlateColorDB["npccolor2"]["g"]
				PlateColorDB["NPCs"][key]["color"]["b"] = PlateColorDB["npccolor2"]["b"]
				PlateColorDB["NPCs"][key]["usename"] = true
			elseif datacon.color == 3 then
				PlateColorDB["NPCs"][key]["color"] = {r=1,g=0, b=1}
				--PlateColorDB["NPCs"][key]["usehp"] = true
				PlateColorDB["NPCs"][key]["usename"] = true
			end
		ns.AddNPCTableButtons(NPCcontentFrame,key,idname)
	end
	NpsTableHide()
end)

--清空NPC
local NPCltextDe = ns.AddfuncButton(ConFrame5,NPCltext,L["清空NPC列表"],508,-40,125)
NPCltextDe:HookScript("OnClick", function()
	--PlateColorDB["NPCs"] = {}
	for id, autodatacon in pairs(PlateColorDB["NPCs"]) do
		if type(PlateColorDB["NPCs"][id]) == "table" and not PlateColorDB["NPCs"][id]["set"] then
			PlateColorDB["NPCs"][id] = nil
		end
	end
	ns.NPCyOffset = -5
	for key, row in pairs(ns.NPCrowFrames) do
		row:Hide()
		ns.NPCrowFrames[key] = nil
	end
	
end)


end)